home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].zip
/
Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].po
/
ALCHEMY.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
11KB
|
641 lines
*******************************
* ALCHEMY Source code *
* by Jerry Jongerius *
* (C) 1991 by MindCraft Publ. *
* Concord, MA 01742 *
******************************
*
* MOVE PROGRAM UP
ORG $8000
*
LDA #$96
STA $0C
STA $FD
LDA $03D1
BNE DOS33
LDA #4
JSR $BEF5
BCC BUFROK
MEMPROB JMP $BE09
BUFROK CMP #$96
BEQ MOVEIT
LDA #12
BNE MEMPROB
DOS33 LDX #$95
STX $9D01
STX $FD
STA $AA57
JSR $A7D4
MOVEIT LDA #>END+1
STA $FE
LDA #<END+1
STA $FF
LDX #$03
LDA #$00
STA $FC
STA $0B
TAY
BL1 LDA ($FE),Y
STA ($FC),Y
INY
BNE BL1
INC $FF
INC $FD
DEX
BPL BL1
END RTS
********************************
*
ORG $9600
*
********************************
*
* USR() FUNCTION DESCRIPTION
*
********************************
*
* USR(C2) GET ADDRESS OF LINE IN PAGE
* USR(-1),B SET PLOTTING PAGE
* USR(-2),B,C CLEAR PAGE TO VALUE
* USR(-3),A,A DISPLAY PAGE,FULL OR SPLIT
* USR(-4),B,B SWITCH PAGES AROUND
* USR(-5),B,C EOR PAGE WITH BYTE
* USR(-6),B F/F L/R
* USR(-7),B F/F U/D
* USR(-8),B,C1,C2,C,C,S CIRCLE DRAWER
* USR(-9),B,C1,C2,C1,C2 BOX DRAWER
*
* A = 1,2
* B = 1,2,3
* C = 0...255
* S = STEP VALUE
* C1 = 0...279
* C2 = 0...191
*
********************************
*
* EQUATES
*
********************************
*
HGRZP EQU $E6
EVAL1 EQU $DD67
SYNCHECK EQU $DEBE
CONFAC EQU $E10C
ILLQTYP EQU $E199
FLOATIN EQU $E2F2
FLOATINA EQU $E301
COMBYTE EQU $E74C
ADDFAC EQU $E7BE
MULTFAC EQU $E97F
LOADFAC EQU $EAF9
PACFAC EQU $EB2B
CMPFAC EQU $EBB2
COSOFFAC EQU $EFEA
SINOFFAC EQU $EFF1
PLOTPOINT EQU $F457
PLOTLINE EQU $F53A
GETXY EQU $F6B9
*
********************************
*
* ENTRY POINT
*
* FROM USR()
*
********************************
*
JSR CONFAC
LDA $A0
BMI NEGSUB
BNE ILLEGAL
LDA $A1
CMP #$C0
BCS ILLEGAL
STA $A1
ASL A
ASL A
STA $A0
ASL A
ROL A
ROL A
ORA $A0
AND #$1F
ORA HGRZP
PHA
AND #$00
ROR A
BIT $A1
BPL OVER1
ADC #$50
OVER1 BVC OVER2
ADC #$28
OVER2 TAY
PLA
JMP FLOATIN
*
********************************
*
* SKIP OVER CALCLINE
*
********************************
*
NEGSUB LDA $A1
EOR #$FF
CMP #$09
BCS ILLEGAL
ASL A
TAX
LDA #<EXIT
PHA
LDA #>EXIT-1
PHA
LDA TABLE,X
PHA
INX
LDA TABLE,X
PHA
RTS
*
********************************
*
* EXIT
*
********************************
*
EXIT LDA HGRZP
LSR A
LSR A
LSR A
LSR A
LSR A
TAY
JMP FLOATINA
*
********************************
*
* GET VALUES
*
********************************
*
GETVAL4 LDA #$04
GETVAL3 BIT $03A9
STA $4E
JSR COMBYTE
TXA
BEQ ILLEGAL
CPX $4E
BCC PAGEOK
ILLEGAL JMP ILLQTYP
PAGEOK LSR $4E
BCS OVER3
ASL A
ASL A
ASL A
ASL A
ASL A
OVER3 RTS
*
********************************
*
* TABLE OF
*
* ENTRY POINTS
*
********************************
*
TABLE DDB SPP-1
DDB CPVA-1
DDB DP-1
DDB SP-1
DDB EPB-1
DDB LR-1
DDB UP-1
DDB CIR-1
DDB PB-1
SKP 2
*******************************
*
* SET PLOTTING PAGE
*
********************************
*
SPP JSR GETVAL4
STA HGRZP
RTS
*
********************************
*
* CLEAR PAGE TO VALUE
*
********************************
*
CPVA JSR GETVAL4
PHA
JSR COMBYTE
PLA
STA $A6
AND #$00
STA $A5
TAY
TXA
LDX #$20
STORE1 STA ($A5),Y
INY
BNE STORE1
INC $A6
DEX
BNE STORE1
RTS
*
********************************
*
* DISPLAY A PAGE
*
********************************
*
DP JSR GETVAL3+1
STA $C057
STA $C050
STA $C053,X
JSR GETVAL3+1
STA $C051,X
RTS
*
********************************
*
* SWITCH PAGES
*
********************************
*
SP JSR GETVAL4
PHA
JSR GETVAL4
STA $A8
PLA
STA $A6
CMP $A8
BEQ RTSJ1
AND #$00
STA $A5
STA $A7
TAY
LDX #$20
STORE2 LDA ($A5),Y
PHA
LDA ($A7),Y
STA ($A5),Y
PLA
STA ($A7),Y
INY
BNE STORE2
INC $A6
INC $A8
DEX
BNE STORE2
RTSJ1 RTS
*
********************************
*
* EOR PAGE
*
********************************
*
EPB JSR GETVAL4
PHA
JSR COMBYTE
PLA
STA $A6
LDY #$00
STY $A5
STX $A7
LDX #$20
STORE3 LDA ($A5),Y
EOR $A7
STA ($A5),Y
INY
BNE STORE3
INC $A6
DEX
BNE STORE3
RTS
*
********************************
*
* HGR F/F L/R
*
********************************
*
LR JSR GETVAL4
STA $A9
LDA #$00
L9 STA $A5
LDA $A9
STA $A6
LDA #$20
STA $A7
L4 LDY #$27
L1 LDA ($A5),Y
PHA
DEY
BPL L1
LDY #$27
L3 PLA
LDX #$07
ROL A
ROL $A8
ROR A
L2 ROR A
ROL $A8
DEX
BNE L2
LDA $A8
STA ($A5),Y
DEY
BPL L3
*
INC $A6
DEC $A7
BNE L4
LDA $A5
ASL A
BNE L5
LDA #$28
L5 BCS L6
ASL A
BCC L7
LDA #$00
L6 ASL A
BCC L8
RTS
L8 SEC
L7 ROR A
BCC L9
*
********************************
*
* HGR F/F U/D
*
********************************
*
UP JSR GETVAL4
STA $A9
LDA #$D8
STA $A5
LDA #$F8
STA $A7
L12 LDA $A9
STA $A6
CLC
ADC #$1F
STA $A8
LDA $A5
ADC #$28
STA $A5
LDA $A7
SEC
SBC #$28
STA $A7
LDX #$20
L11 LDY #$27
L10 LDA ($A5),Y
PHA
LDA ($A7),Y
STA ($A5),Y
PLA
STA ($A7),Y
DEY
BPL L10
INC $A6
DEC $A8
DEX
BNE L11
LDA $A5
CMP #$50
BNE L12
RTS
*
********************************
*
* STORAGE FOR CIRCLE
*
********************************
*
PLOTVAL DS $01
ENDVAL DS $01
*
STOREXL DS $01
STOREXH DS $01
STOREY DS $01
*
STOREXM DS $01
STOREYM DS $01
XMFAC DS $05
YMFAC DS $05
*
ASX DS $01
ASY DS $01
*
STEP DS $05
FORNEXT DS $05
PIFOUR DFB $80,$49,$0F,$DA,$A2
*
********************************
*
* CIRCLE
*
********************************
*
CIR LDA HGRZP
PHA
JSR GETVAL4
STA HGRZP
JSR SYNCHECK
JSR GETXY
STA STOREY
STY STOREXH
STX STOREXL
JSR COMBYTE
STX STOREXM
TXA
TAY
JSR FLOATINA
LDX #>XMFAC
LDY #<XMFAC
JSR PACFAC
JSR COMBYTE
STX STOREYM
TXA
TAY
JSR FLOATINA
LDX #>YMFAC
LDY #<YMFAC
JSR PACFAC
LDX STOREYM
LDA #$80
LDY #$40
CPX STOREXM
BEQ CIRL0
LDA #$81
LDY #$64
CIRL0 STA PIFOUR
STY ENDVAL
JSR SYNCHECK
JSR EVAL1
LDX #>STEP
LDY #<STEP
JSR PACFAC
BNE NOTZERO
JMP ILLQTYP
NOTZERO TYA
LDX #$04
CIRL1 STA FORNEXT,X
DEX
BPL CIRL1
*
********************************
*
* START SUB
*
********************************
*
*.CALC.X
STARTSUB LDA #>FORNEXT
LDY #<FORNEXT
JSR LOADFAC
JSR COSOFFAC
LDA #>XMFAC
LDY #<XMFAC
JSR MULTFAC
JSR CONFAC
LDA $A1
STA ASX
*.CALC.Y
LDA #>FORNEXT
LDY #<FORNEXT
JSR LOADFAC
JSR SINOFFAC
LDA #>YMFAC
LDY #<YMFAC
JSR MULTFAC
JSR CONFAC
LDA $A1
STA ASY
*.CALC&PLOT.POINTS
LDA #$33
STA PLOTVAL
*.FIGURE.X
STARTPLOT LDA STOREXL
BIT PLOTVAL
BPL CIRL2
SEC
SBC ASX
TAX
LDA STOREXH
SBC #$00
TAY
JMP CIRL3
CIRL2 CLC
ADC ASX
TAX
LDA STOREXH
ADC #$00
TAY
CIRL3 CPY #$01
BCC CIRL4
BNE CIRL5
CPX #$18
BCS CIRL5
*.FIGURE.Y
CIRL4 LDA STOREY
BIT PLOTVAL
BVC CIRL6
SEC
SBC ASY
BCC CIRL5
BCS CIRL7
CIRL6 CLC
ADC ASY
BCS CIRL5
CIRL7 CMP #$C0
BCS CIRL5
*
JSR PLOTPOINT
*
CIRL5 LDA PLOTVAL
CMP #$98
BNE ASLPV
LDA ASX
LDX ASY
STA ASY
STX ASX
LDA #$C8
STA PLOTVAL
LSR PLOTVAL
ASLPV LDA PLOTVAL
ASL PLOTVAL
CMP ENDVAL
BNE STARTPLOT
LDA #>FORNEXT
LDY #<FORNEXT
JSR LOADFAC
LDA #>STEP
LDY #<STEP
JSR ADDFAC
LDX #>FORNEXT
LDY #<FORNEXT
JSR PACFAC
LDA #>PIFOUR
LDY #<PIFOUR
JSR CMPFAC
CMP #$01
BEQ EXITCIR
JMP STARTSUB
EXITCIR PLA
STA HGRZP
RTS
*
********************************
*
* PLOT BOX
*
********************************
*
PB LDA HGRZP
PHA
JSR GETVAL4
STA HGRZP
JSR SYNCHECK
JSR GETXY
JSR PLOTPOINT
JSR SYNCHECK
JSR GETXY
STX $A8
STY $A9
STA $AA
LDA $E0
STA $A5
LDA $E1
STA $A6
LDA $E2
STA $A7
LDA $A8
LDX $A9
LDY $A7
JSR PLOTLINE
LDA $A8
LDX $A9
LDY $AA
JSR PLOTLINE
LDA $A5
LDX $A6
LDY $AA
JSR PLOTLINE
LDA $A5
LDX $A6
LDY $A7
JSR PLOTLINE
PLA
STA HGRZP
RTS